Data processing systems use various techniques to perform error checking on data transmitted over a network. One common technique is a cyclic redundancy check (CRC). When a block of data, such as a frame or a packet, is transmitted over a network, a CRC is calculated over the block of data and inserted into the data transmission, typically at the end of the block of data. At the receiving end, a CRC is calculated over the received block of data. If there are no errors in the data transmission, the CRC calculated at the receiving end should match the CRC that was inserted into the data transmission.
In a CRC calculation, a designated polynomial represents a divisor that is used to divide a block of data in a long polynomial division. The quotient of the division is discarded, and the remainder of the division is the CRC value. In general, a CRC can have any number of bits as indicated by the particular polynomial used in the CRC algorithm. A CRC-X value has X number of bits and employs a polynomial of the Xth order. For example, one commonly used CRC algorithm is a CRC-32. A CRC-32 value has 32-bits, and an example of a polynomial used in a CRC-32 algorithm is:                x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1One particular communications protocol that uses this polynomial for its CRC-32 calcualtion is the Ethernet protocol, where a CRC-32 value is calculated over the header and data fields of an Ethernet frame and appended to the end of the Ethernet frame. Other protocols may use other polynomials and may also use other common CRC algorithms including CRC-8, CRC-16, and CRC-24.        